package com.pass.util;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class LogUtils {

    /**
     * 默认可以打印
     */
    private static boolean enable = true;

    /**
     * 默认打印所有级别日志
     */

    private static LogLevel minLevel = LogLevel.ALL;

    /**
     * 日期显示格式
     */

    private static final SimpleDateFormat sdf;

    static {
        sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss", Locale.CHINA);
    }

    /**
     * 设置是否开启打印
     *
     * @param enable
     * @author ygr
     * @date 2018年4月9日 上午9:54:46
     */

    public static void setEnable(boolean enable) {

        LogUtils.enable = enable;

    }

    /**
     * 设置日志打印级别
     *
     * @param level
     * @author ygr
     * @date 2018年4月9日 上午9:42:09
     */

    public static void setLogLevel(LogLevel level) {

        LogUtils.minLevel = level;

    }

    /**
     * 打印消息级别日志
     *
     * @param msg 待打印消息
     * @author ygr
     * @date 2018年4月9日 上午9:42:59
     */

    public static void info(String tag, String msg) {

        finalPrint(LogLevel.INFO, tag, msg);

    }

    /**
     * 打印警告级别日志
     *
     * @param msg 待打印消息
     * @author ygr
     * @date 2018年4月9日 上午9:42:59
     */

    public static void warn(String tag, String msg) {

        finalPrint(LogLevel.WARN, tag, msg);

    }

    /**
     * 打印错误级别日志
     *
     * @param msg 待打印消息
     * @author ygr
     * @date 2018年4月9日 上午9:42:59
     */

    public static void error(String tag, String msg) {

        finalPrint(LogLevel.ERROR, tag, msg);

    }

    /**
     * 最终打印日志
     *
     * @param logLevel 日志级别
     * @param msg      待打印消息
     * @author ygr
     * @date 2018年4月9日 上午9:50:21
     */

    private static void finalPrint(LogLevel logLevel, String tag, String msg) {

        if (!enable) {

            return;

        }

        if (logLevel.isAllow(minLevel)) {

            System.out.printf("%s %s %s %s\n", formatCurrentTime(), logLevel.getName(), tag, msg);

        }

    }

    /**
     * 获取当前时间
     *
     * @return
     * @author ygr
     * @date 2018年4月9日 上午9:49:00
     */

    private static String formatCurrentTime() {

        return sdf.format(new Date());

    }

    /**
     * 写出日志
     *
     * @param str
     * @return
     */
    public static void putTextLog(String ttyStr, String fileName, String str) {
        String filepath = "/sdcard/selllogs";
        File file = new File(filepath);
        if (!file.exists()) {
            file.mkdirs();
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String filename = ttyStr + fileName + ".log";

        sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        str = "[" + sdf.format(new Date()) + "]" + str + "\n";
        file = new File(filepath, filename);
        try {
            if (!file.exists()) {
                file.createNewFile();
            }
            RandomAccessFile raf = new RandomAccessFile(file, "rw");
            raf.seek(file.length());
            raf.write(str.getBytes());
            raf.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public static String getLineNum() {

        StackTraceElement[] stackTraceElements = new Throwable().getStackTrace();
        if (stackTraceElements.length < 2) {
            return "unknown";
        }
        StackTraceElement ste3 = stackTraceElements[1];
        return (ste3.getFileName() + ": Line " + ste3.getLineNumber());
    }

    public static void main(String[] args) {
//        putTextLog("ttyS1", "20221012130100", "00 11 AA");
    }


}